/**
 * 用户控制器
 * @module controllers/user
 */

const bcrypt = require('bcrypt');
const User = require('../models/user.model');

/**
 * 获取当前登录用户的信息
 * @param {Object} req - Express请求对象
 * @param {Object} res - Express响应对象
 * @param {Function} next - Express下一个中间件函数
 */
exports.getProfile = async (req, res, next) => {
  try {
    // 从认证中间件中获取用户ID
    const userId = req.user.id;
    
    // 查找用户
    const user = await User.findById(userId);
    
    if (!user) {
      return res.status(404).json({
        code: 404,
        message: '用户不存在',
        errors: []
      });
    }
    
    // TODO: 在实现统计功能后，获取用户使用统计
    const usageStats = {
      imageTools: 0,
      textTools: 0,
      totalUsage: 0
    };
    
    // 添加使用统计到用户数据
    user.usageStats = usageStats;
    
    // 返回用户信息
    res.status(200).json({
      code: 200,
      message: '获取成功',
      data: user
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 更新当前登录用户的信息
 * @param {Object} req - Express请求对象
 * @param {Object} res - Express响应对象
 * @param {Function} next - Express下一个中间件函数
 */
exports.updateProfile = async (req, res, next) => {
  try {
    // 从认证中间件中获取用户ID
    const userId = req.user.id;
    
    // 从请求体中获取数据
    const { email, password, currentPassword } = req.body;
    
    // 查找用户
    const user = await User.findById(userId);
    
    if (!user) {
      return res.status(404).json({
        code: 404,
        message: '用户不存在',
        errors: []
      });
    }
    
    // 准备更新数据
    const updateData = {};
    
    // 如果更新邮箱
    if (email && email !== user.email) {
      updateData.email = email;
    }
    
    // 如果更新密码
    if (password && currentPassword) {
      // 查询完整用户信息，包含密码
      const fullUser = await User.findByUsername(user.username);
      
      // 验证当前密码
      const isPasswordValid = await bcrypt.compare(currentPassword, fullUser.password);
      
      if (!isPasswordValid) {
        return res.status(400).json({
          code: 400,
          message: '当前密码错误',
          errors: [{
            field: 'currentPassword',
            message: '当前密码错误'
          }]
        });
      }
      
      // 哈希新密码
      const salt = await bcrypt.genSalt(10);
      const hashedPassword = await bcrypt.hash(password, salt);
      
      updateData.password = hashedPassword;
    }
    
    // 如果没有要更新的数据
    if (Object.keys(updateData).length === 0) {
      return res.status(400).json({
        code: 400,
        message: '没有提供可更新的数据',
        errors: []
      });
    }
    
    // 更新用户
    const updatedUser = await User.update(userId, updateData);
    
    // 返回更新后的用户信息
    res.status(200).json({
      code: 200,
      message: '更新成功',
      data: updatedUser
    });
  } catch (error) {
    next(error);
  }
}; 